package br.unicamp.ic.inf300.arena.persistencia.dao.impl;

import java.sql.SQLException;
import java.sql.Time;
import java.util.Calendar;

import junit.framework.TestCase;

import org.apache.log4j.Logger;

import br.unicamp.ic.inf300.arena.modelo.artistico.Filme;
import br.unicamp.ic.inf300.arena.modelo.artistico.PecaTeatral;
import br.unicamp.ic.inf300.arena.persistencia.dao.IEspetaculoDAO;
import br.unicamp.ic.inf300.framework.persistencia.DAOFactory;

public class EspetaculoDAOHsqlTest extends TestCase {
	private static final String PERSISTENCIA_PROPERTIES = "br/unicamp/ic/inf300/persistencia.properties";

	private static Logger _logger = Logger.getLogger(EspetaculoDAOHsqlTest.class
			.getName());

	private IEspetaculoDAO daoEspetaculo = null;

	protected void setUp() throws Exception {
		super.setUp();
		DAOFactory.getInstance(PERSISTENCIA_PROPERTIES);
		daoEspetaculo = (IEspetaculoDAO) DAOFactory
				.getImpl(IEspetaculoDAO.class);
	}

	public void testInserir() {
		try {
			_logger.debug("\n testInserir() \n\n" );

			Filme vooUnited93;
			vooUnited93 = new Filme("Voo United 93", "Drama",
					"Retrata um dos voos do atentado terrorista de 11 Stembro",
					14, "", gerarDuracaoSessao(01, 35), "Columbia");
			//
			assertEquals(true, daoEspetaculo.inserir(vooUnited93));

			PecaTeatral grandeFamilia;
			grandeFamilia = new PecaTeatral("A grande família", "Comédia",
					"Peça teatral baseada na série Grande Família",
					14, "", gerarDuracaoSessao(01, 35), "Globo produções", "Globo produções");
			//
			assertEquals(true, daoEspetaculo.inserir(grandeFamilia));
		}
		catch(SQLException sqlErr) {
			System.err.println( sqlErr.getMessage() );
			assertFalse(true);
		}
		catch(Exception err) {
			System.err.println( err.getMessage() );
			assertFalse(true);
		}
	}

	protected void tearDown() throws Exception {
		super.tearDown();
		daoEspetaculo = null;
	}

	/**
	 * @param horas (int)
	 * @param minutos (int)
	 *
	 * @return horario da sessao (java.sql.Time)
	 *
	 */
	public Time gerarHorarioSessao(int horas, int minutos) {
		Calendar calendar = Calendar.getInstance();
		//
		calendar.setTime(new java.util.Date());
		calendar.set(Calendar.HOUR, horas);
		calendar.set(Calendar.MINUTE, minutos);
		calendar.set(Calendar.SECOND, 00);
		//
		return (new Time(calendar.getTimeInMillis()));
	}

	/**
	 * 
	 * @param horas
	 * @param minutos
	 * @return
	 * Time
	 */
	public Time gerarDuracaoSessao(int horas, int minutos) {
		return gerarHorarioSessao(horas, minutos);
	}
}